home *** CD-ROM | disk | FTP | other *** search
/ Amiga Inside! / Amiga FD Inside (1995)(Ultramax).iso / forumamiga / ausgabe09 / texte / gadgets < prev    next >
Text File  |  1992-09-05  |  5KB  |  153 lines

  1. ›[0m›[0 p                                                     André Voget 31.08.92
  2.  
  3. ›[0;3mBool-Gadgets in Gfa-Programmen mit dem OS2-Look›[0m
  4. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5.  
  6. Im folgenden stelle ich Dir zwei Unterroutinen für  Deine  Gfa-Basic-Un­
  7. terroutinen-Sammlung vor:
  8.  
  9. a)  "intgadget" erzeugt in einem Window ein Bool-Gadget. Das Gadget kann
  10. auf drei verschiedene Arten angezeigt werden: OS2-Look, OS2-Look  einge­
  11. drückt  und  beide kombiniert. Am besten probierst Du alle drei Möglich­
  12. keiten einmal aus. Selbstverständlich kann ein Text im Gadget ausgegeben
  13. werden, das automatisch einen Schatten bekommt. Damit die Gadgets  ihren
  14. OS2-Look  entfalten  können, müssen auch die OS2-Farben eingestellt sein
  15. (Farbe 0: &H777, Farbe 1: &H000, Farbe 2: &HFFF, Farbe 3: &H68B ).
  16.  
  17. b) "killintgadget" löscht ein Gadget aus dem Window und gibt  den  benö­
  18. tigten Speicher wieder frei.
  19.  
  20.  
  21. Um die Routine "intgadget" nutzen zu können, mußt Du ein Window mit der
  22. Routine "owindow" ( in einem anderen Artikel in dieser Forum-Ausgabe )
  23. geöffnet haben. Außerdem mußt Du am Programmende das Feld "bgadget" di­
  24. mensionieren, und zwar so:
  25.  
  26. DIM bgadget%(10)
  27.  
  28. Statt der "10" kannst Du auch andere Werte eintragen, je nachdem wievie­
  29. le Gadgets Du erzeugen möchtest.
  30.  
  31. Die Routine "intgadget" benötigt neun Parameter:
  32. win& = ist die Nummer des mit "owindow" geöffneten Windows
  33. nr& = ist die Indexzahl. Für jedes neue Gadget mußt Du eine andere
  34.       Nummer eintragen. Erlaubt sind Zahlen, die Du bei der Dimension-
  35.       ierung angegeben hast. Wenn Du "0" angibst, dann wird zwar die
  36.       OS2-Box mit String ausgegeben, aber es wird kein Gadget erstellt.
  37. x1&,y1&,x2&,y2& : sind die Koordinaten des Gadgets
  38. col& = ist die Farbe, mit der die Box ausgefüllt wird, normalerweise
  39.        auf "0" setzen
  40. art& = kann von "1" bis "3" liegen und gibt die Box-Art an ( s.o. )
  41. a$ = ist ein String, der zentriert in der Box mit Schatten ausgegeben
  42.      wird. Er sollte in das Gadget passen!
  43.  
  44. Die Routine "killintgadget" erwartet nur zwei Parameter:
  45. win& = ist wieder einmal die Windownummer eines mit "owindow" geöfffne­
  46.        ten Windows
  47. i& = ist die Indexzahl ( wie "nr&" bei "intgadget" )
  48.  
  49.  
  50. ›[0;4mUnd hier sind sie endlich:›[0m
  51.  
  52. PROCEDURE intgadget(win&,nr&,x1&,y1&,x2&,y2&,col&,art&,a$)
  53.   '
  54.   ' win& = Windownummer
  55.   ' nr&  = Gadget-ID (0 = kein richtiges Gadget)
  56.   ' x1 ,y1  = linke, obere Ecke
  57.   ' x2 ,y2  = rechte, untere Ecke
  58.   ' col  = Farbe zum Ausfüllen der Box
  59.   ' art  =    1: 3D-Darstellung, 2: inverse Darstellung, 4: keine Box
  60.   ' flags = 1: nur aktiviert, wenn Maus losgelassen, 2: wenn gedrückt
  61.   ' a$ = Text im Gadget
  62.   '
  63.   ' Vorher definieren: DIM bgadget%(gadgetanzahl&)
  64.   '
  65.   LOCAL l&,rp%
  66.   rp%={win%(win&)+50}
  67.   '
  68.   ' Wenn Du das Window lieber mit "OPENW" öffnen möchtest, dann
  69.   ' mußt Du statt der vorangegangenen Zeile folgendes schreiben:
  70.   ' rp%={WINDOW(win&)+50}
  71.   '
  72.   IF nr&>0                              ! Gadget-Initialisierung
  73.     bgadget%(nr&)=AllocMem(50,65537)
  74.     IF bgadget%(nr&)=0
  75.       @ende
  76.     ENDIF
  77.     '
  78.     WORD{bgadget%(nr&)+4}=x1&           ! Gadget-Struktur
  79.     WORD{bgadget%(nr&)+6}=y1&
  80.     WORD{bgadget%(nr&)+8}=x2&-x1&+1
  81.     WORD{bgadget%(nr&)+10}=y2&-y1&+1
  82.     WORD{bgadget%(nr&)+14}=1            ! Activision
  83.     WORD{bgadget%(nr&)+16}=1            ! Type
  84.     WORD{bgadget%(nr&)+38}=nr&          ! ID
  85.     '
  86.     ~AddGadget(win%(win&),bgadget%(nr&),-1)
  87.     ~OnGadget(bgadget%(nr&),win%(win&),0)
  88.   ENDIF
  89.   '
  90.   ~SetAPen(rp%,col&)
  91.   ~RectFill(rp%,x1&,y1&,x2&,y2&)
  92.   ~SetDrMd(rp1%,0)
  93.   ~SetDrMd(rp2%,0)
  94.   IF art&=1                             ! art = 1 normale Darstellung
  95.     ~SetAPen(rp%,2)
  96.     ~Move(rp%,x2&,y1&)
  97.     ~Draw(rp%,x1&,y1&)
  98.     ~Draw(rp%,x1&,y2&)
  99.     ~Move(rp%,x1&+1,y1&+1)
  100.     ~Draw(rp%,x1&+1,y2&)
  101.     ~SetAPen(rp%,1)
  102.     ~Draw(rp%,x2&,y2&)
  103.     ~Draw(rp%,x2&,y1&)
  104.     ~Move(rp%,x2&-1,y1&+1)
  105.     ~Draw(rp%,x2&-1,y2&)
  106.   ELSE IF art&=2                        ! art = 2 inverse Darstellung
  107.     ~SetAPen(rp%,1)
  108.     ~Move(rp%,x2&,y1&)
  109.     ~Draw(rp%,x1&,y1&)
  110.     ~Draw(rp%,x1&,y2&)
  111.     ~Move(rp%,x1&+1,y1&+1)
  112.     ~Draw(rp%,x1&+1,y2&)
  113.     ~SetAPen(rp%,2)
  114.     ~Draw(rp%,x2&,y2&)
  115.     ~Draw(rp%,x2&,y1&)
  116.     ~Move(rp%,x2&-1,y1&+1)
  117.     ~Draw(rp%,x2&-1,y2&)
  118.   ELSE IF art&=3                        ! art = 3: 3D und invertiert
  119.    '
  120.    ' Wow! Rekursive Programmierung in Gfa-Basic...
  121.    '
  122.     @intgadget(win&,0,x1&,y1&,x2&,y2&,col&,1,"")
  123.     @intgadget(win&,0,x1&+1,y1&+1,x2&-1,y2&-1,col&,2,"")
  124.   ENDIF
  125.   IF a$<>""
  126.     a$=a$+CHR$(0)
  127.     l&=TextLength(rp%,V:a$,LEN(a$)-1)
  128.     x&=((x2&-x1&-l&)/2)+x1&
  129.     y&=((y2&-y1&-8)/2)+y1&+7
  130.     l&=LEN(a$)-1
  131.     ~SetAPen(rp%,1)
  132.     ~Move(rp%,x&+1,y&+1)
  133.     ~Text(rp%,V:a$,l&)
  134.     ~SetAPen(rp%,2)
  135.     ~Move(rp%,x&,y&)
  136.     ~Text(rp%,V:a$,l&)
  137.   ENDIF
  138. RETURN
  139.  
  140. PROCEDURE killintgadget(win&,i&)
  141.   '
  142.   ' Löscht ein Gadget mit der Nummer "i&", das mit "intgadget" erstellt wurde
  143.   '
  144.   ' win& = Windownummer, i& = Gadgetnummer
  145.   '
  146.   IF bgadget%(i&)
  147.     ~RemoveGadget(win%(win&),bgadget%(i&))
  148.     ~FreeMem(bgadget%(i&),50)
  149.     bgadget%(i&)=0
  150.   ENDIF
  151. RETURN
  152.  
  153. ›[0m›[1 p